package com.example.demokotlin

import org.junit.Test
import org.junit.experimental.theories.suppliers.TestedOn


/**
 * 字符串处理
 *
 * @author zhouronghua
 * @time 2021/9/23 8:36 上午
 */
class StringTest {
    private val EMPTY = ""

    /**
     * 测试字符串分割
     * split 按照特定字符分割字符串，返回字符串列表List
     * List集合又支持解构语法特性，它允许你在一个表达式里给多个变量赋值，
     * 解构常用来简化变量的赋值
     *
     * @author zhouronghua
     * @time 2021/9/23 8:37 上午
     */
    @Test
    fun testSplit() {
        println("=== 字符串分割 ===")
        val names = "Jack, Lucy, Staff"
        val nameList = names.split(",")
            // 字符串去掉空格
            .map {
                it.trim()
            }
        println(nameList)
    }

    /**
     * 格式化视频标签
     * 说明：原来的标签通过逗号分隔，格式化为 '/' 分隔
     *
     * @author zhouronghua
     * @time 2022/4/15 5:24 下午
     */
    fun formatVideoTag(tag: String?): String? {
        if (tag.isNullOrEmpty()) {
            return EMPTY
        }
        // 分隔字符串
        val list = tag.split(",")
        var result = ""
        for (item in list) {
            if (item.isNullOrEmpty() || item.trim().isNullOrEmpty()) {
                continue
            }
            if (result.isNotEmpty()) {
                result += " / "
            }
            result += item.trim()
        }
        return result
    }

    @Test
    fun testStringFormat() {
        println(formatVideoTag(null))
        println(formatVideoTag(""))
        println(formatVideoTag("奇幻,冒险,"))
        println(formatVideoTag(",奇幻,  冒险, 人伦, 游戏"))
    }

    /**
     * replace字符串替换
     *
     * @author zhouronghua
     * @time 2021/9/23 8:44 上午
     */
    @Test
    fun testReplace() {
        println("=== replace字符串替换 ===")
        val str1 = "The People's Republic of China"
        val str2 = str1.replace(Regex("[aeiou]")) {
            when (it.value) {
                "a" -> "7"
                "e" -> "8"
                "i" -> "9"
                "o" -> "1"
                "u" -> "2"
                else -> it.value
            }
        }
        println("replace before: $str1   after: $str2")
    }

    /**
     * 比较操作符
     * == 比较对象的值是否相等
     * === 比较像个对象的引用是否是同一个
     *
     * @author zhouronghua
     * @time 2021/9/23 8:52 上午
     */
    @Test
    fun testCompare() {
        println("=== 字符串比较 ===")
        val str1 = "Jacka"
        val str2 = "Jacka"
        // 比较内容，两个字符串相等
        println("str1==str2 ${str1 == str2}")
        // 比较引用，JVM虚拟机字符串常量位于常量池中，
        // 相同的内容指向同一个常量，因此也是相等的
        println("str1===str2 ${str1 === str2}")
    }

    /**
     * 测试获取子字符串
     *
     * @author zhouronghua
     * @time 2021/9/23 8:57 上午
     */
    @Test
    fun testSubString() {
        println("=== substring获取字符串子串 ===")
        val str1 = "The People's Republic of China"
        val str2 = str1.substring(str1.indexOf("\'") + 1)
        println("sub string: " + str2)
    }
}
